
#include"../file_h/move.h"
void move_right(){
    Queue *qu=Init_queue();
    int i=0,j=0;
    for(i=1;i<=4;i++){
        clear_queue(qu);
        use_only_q_right(qu,i);
    }

}

void use_only_q_right(Queue *qu,int i){
    int j=0;
    for(j=4;j>=1;j--){
            if(arr[i][j]!=0){
                add_Queue(qu,arr[i][j]); //将数组中的元素入队
            }
        }
        for(int k=1;k<=4;k++){
            arr[i][k]=0;
        }
        j=4;
        while(!is_empty_queue(qu)){
            int q1=out_Queue(qu);
            if(!is_empty_queue(qu)&&q1==peek_Queue(qu)){
                int q2=out_Queue(qu);
                arr[i][j]=q1+q2;
                score+=(q1+q2);
            }else{
                arr[i][j]=q1;
            }
            j--;
        }
}

//向左移动-----------------------------------
void move_left(){
    Queue *qu=Init_queue();
    int i=0,j=0;
    for(i=1;i<=4;i++){
        clear_queue(qu);
        move_only_q_left(qu,i);
    }
}

void move_only_q_left(Queue *qu,int i){
    int j=0;
    for(j=1;j<=4;j++){
            if(arr[i][j]!=0){
                add_Queue(qu,arr[i][j]); //将数组中的元素入队
            }
    }
    for(int k=1;k<=4;k++){
        arr[i][k]=0;
    }
    j=1;
    while(!is_empty_queue(qu)){
            int q1=out_Queue(qu);
            if(!is_empty_queue(qu)&&q1==peek_Queue(qu)){
                int q2=out_Queue(qu);
                arr[i][j]=q1+q2;
                score+=(q1+q2);
            }else{
                arr[i][j]=q1;
            }
            j++;
        }
}
//向上移动-----------------------------------
void move_up(){
    Queue *qu=Init_queue();
    int i=0,j=0;
    for(j=1;j<=4;j++){
        clear_queue(qu);
        move_only_q_up(qu,j);
    }
}

void move_only_q_up(Queue *qu,int j){
    int i=0;
    for(i=1;i<=4;i++){
        if(arr[i][j]!=0){
            add_Queue(qu,arr[i][j]); //将数组中的元素入队
        }
    }
    for(int k=1;k<=4;k++){
        arr[k][j]=0;
    }
    i=1;
    while(!is_empty_queue(qu)){
            int q1=out_Queue(qu);
            if(!is_empty_queue(qu)&&q1==peek_Queue(qu)){
                int q2=out_Queue(qu);
                arr[i][j]=q1+q2;
                score+=(q1+q2);
            }else{
                arr[i][j]=q1;
            }
            i++;
    }
}
//向下移动-----------------------------------
void move_down(){
    Queue *qu=Init_queue();
    int i=0,j=0;
    for(j=1;j<=4;j++){
        clear_queue(qu);
        move_only_q_down(qu,j);
    }
}

void move_only_q_down(Queue *qu,int j){
    int i=0;
    for(i=4;i>=1;i--){
        if(arr[i][j]!=0){
            add_Queue(qu,arr[i][j]); //将数组中的元素入队
        }
    }
    for(int k=1;k<=4;k++){
        arr[k][j]=0;
    }
    i=4;
    while(!is_empty_queue(qu)){
            int q1=out_Queue(qu);
            if(!is_empty_queue(qu)&&q1==peek_Queue(qu)){
                int q2=out_Queue(qu);
                arr[i][j]=q1+q2;
                score+=(q1+q2);
            }else{
                arr[i][j]=q1;
            }
            i--;
    }
}